home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG Library 8 / PC-SIG Library CD-ROM (8th Edition) (1990-04).iso / 201_300 / disk0267 / sortint.bas < prev    next >
Encoding:
BASIC Source File  |  1970-01-01  |  11.4 KB  |  640 lines

  1. 3 ON ERROR GOTO 64200
  2. 4 DEFINT K,F,T,L,R,N
  3. 5 DIM K$(55)
  4. 6 DIM FLDN$(1,60),FTY(1,60),FL(1,60)
  5. 7 DEFINT X,P
  6. 8 DIM X(10000),T(10000),NREC(17),FD(3),Z$(60),L(100),R(100),F$(17)
  7. 10 MAXR= 6
  8. 12 GOSUB 8000
  9. 15 GOSUB 13000
  10. 16 H = A
  11. 17 GOSUB 7000
  12. 19 DEFSTR Z
  13. 20 A = H
  14. 25 GOSUB 9000
  15. 30 FLG = 0
  16. 45 L = 0
  17. 50 FOR T = 1 TO NREC(A)
  18. 55 L = L + FL(A,T)
  19. 60 NEXT T
  20. 70 DEFINT T
  21. 90 GOSUB 11000
  22. 100 GOSUB 10000
  23. 400 REM ******  GET DATA FROM DISKS  *******
  24. 405 GOSUB 16000
  25. 420 FOR T = 1 TO 30000 
  26. 429 IF T > MRN GOTO 26000
  27. 430 GET #1,T
  28. 433 REM
  29. 435 N = FD(1)
  30. 436 IF FTY(1,N) = 1 GOTO 500
  31. 438 IF T1 = 1 THEN X(T) = 0
  32. 439 X(T) = X(T)*1E+06    
  33. 440 ON FTY(1,N) GOTO 500,550,600,650,650
  34. 500 REM *** LET X(T) = Z$(N)
  35. 510 GOTO 700
  36. 550 X(T) = CVI(Z$(N)) + X(T)
  37. 560 GOTO 700
  38. 600 X(T) = CVS(Z$(N)) + X(T)
  39. 610 GOTO 700
  40. 650 X(T) = CVD(Z$(N)) + X(T)
  41. 700 REM
  42. 705 T(T) = T
  43. 710 NEXT T
  44. 1200 LP = 1   
  45. 1210 FLG = 0
  46. 2000 REM
  47. 2010 M = 5000
  48. 2020 GOSUB 30000
  49. 2110 GOSUB 2200
  50. 2120 GOSUB 30000
  51. 2130 GOTO 3000
  52. 2200 REM
  53. 2210 L(1) = 1 
  54. 2220 R(1) = MAXR
  55. 2230 S = 1
  56. 2240 IF (L(S)) < R(S) THEN 2270
  57. 2250    S = S - 1
  58. 2260    GOTO 2640
  59. 2270 I = L(S)
  60. 2280 J = R(S)
  61. 2290 P1= X(J)
  62. 2300 M = (I + J)/2
  63. 2310 IF (J - I<6) THEN 2400
  64. 2320 IF ((P1>X(I)) AND (P1<X(M))) THEN 2400
  65. 2330 IF ((P1<X(I)) AND (P1>X(M))) THEN 2400
  66. 2340 IF ((X(I)<X(M)) AND (X(I)>P1)) THEN 2380
  67. 2350 IF ((X(I)>X(M)) AND (X(I)<P1)) THEN 2380
  68. 2360 SWAP X(M),X(J)
  69. 2365 SWAP T(M),T(J)
  70. 2370 GOTO 2390
  71. 2380 SWAP X(I),X(J)
  72. 2385 SWAP T(I),T(J)
  73. 2390 P1 = X(J)
  74. 2400 WHILE (I<J)          
  75. 2410 WHILE (X(I)< P1)   
  76. 2420 I = I + 1
  77. 2430 WEND     
  78. 2440 J=J-1
  79. 2450 WHILE  (I<J)AND(P1<X(J))  
  80. 2460 J = J-1
  81. 2470 WEND     
  82. 2480 IF (I>=J) THEN 2510
  83. 2490 SWAP X(I),X(J)
  84. 2500 SWAP T(I),T(J)
  85. 2510 WEND      
  86. 2520 J = R(S)
  87. 2530 SWAP X(I),X(J)
  88. 2540 SWAP T(I),T(J)
  89. 2550 IF (I - L(S)>=R(S)-I) THEN 2600
  90. 2560    L(S + 1) = L(S)
  91. 2570    R(S + 1) = I - 1
  92. 2580    L(S) = I + 1
  93. 2590    GOTO 2630
  94. 2600    L(S + 1) = I + 1
  95. 2610    R(S + 1) = R(S)
  96. 2620    R(S) = I - 1 
  97. 2630 S = S + 1
  98. 2640 IF (S > 0) THEN 2240
  99. 2650 RETURN
  100. 3000 REM ********  PUT IN FILE ************
  101. 3100 GOSUB 9100
  102. 3110 Q$ = "B:"+F$(A)
  103. 3200 GOSUB 9200
  104. 3300 FOR Q = 1 TO MAXR
  105. 3310 RN = T(Q)
  106. 3312 GET #1,RN
  107. 3330 LSET Z1$ = Y$
  108. 3340 PUT #2,Q
  109. 3350 NEXT Q
  110. 3500 CLOSE
  111. 3600 GOSUB 15000
  112. 3620 PRINT "SORT FINISHED "
  113. 3630 END
  114. 7000 GOSUB 12000
  115. 7005 OPEN "I",#1,"FFILE"
  116. 7010 INPUT #1,MAXF
  117. 7020 FOR A = 1 TO MAXF
  118. 7030 INPUT #1,A,F$(A),NREC(A),L(A)
  119. 7040 FOR N = 1 TO NREC(A)
  120. 7050 INPUT #1,FLDN$(1,N),FTY(1,N),FL(1,N)
  121. 7055 IF FTY(1,N) = 2 THEN INPUT #1,KY,KEYLIST
  122. 7060 NEXT N
  123. 7065 IF A = AHLD THEN RETURN
  124. 7070 NEXT A
  125. 7080 CLOSE #1
  126. 7100 RETURN
  127. 8000 GOSUB 12000
  128. 8005 OPEN "I",#1,"FFILE"
  129. 8010 INPUT #1,MAXF
  130. 8020 FOR A = 1 TO MAXF
  131. 8030 INPUT #1,A,F$(A),NREC(A),L(A)
  132. 8040 FOR N = 1 TO NREC(A)
  133. 8050 INPUT #1,FLDN$(1,N),FTY(1,N),FL(1,N)
  134. 8055 IF FTY(1,N) = 2 THEN INPUT #1,KY,KEYLIST
  135. 8060 NEXT N
  136. 8070 NEXT A
  137. 8080 CLOSE #1
  138. 8100 RETURN
  139. 9000 REM *******  OPEN FILE SUBROUTINE  *******
  140. 9010 CLOSE #1
  141. 9020 OPEN "R",#1,F$(A),L(A)
  142. 9030 D = 0
  143. 9040 FOR T = 1 TO NREC(A)
  144. 9050 FIELD #1,D AS D$,FL(1,T) AS Z$(T)
  145. 9060 D = D + FL(1,T)
  146. 9070 NEXT T
  147. 9080 RETURN
  148. 9100 REM *******  OPEN FILE SUBROUTINE  *******
  149. 9110 CLOSE #1
  150. 9120 OPEN "R",#1,F$(A),L   
  151. 9140 PRINT " L(A) ";L   
  152. 9150 FIELD #1,L AS Y$    
  153. 9180 RETURN
  154. 9200 REM *******  OPEN FILE SUBROUTINE  *******
  155. 9210 CLOSE #2
  156. 9220 OPEN "R",#2,Q$,L
  157. 9250 FIELD #2,L AS Z1$
  158. 9280 RETURN
  159. 10000 REM *******  INITAL SELECTION  ********
  160. 10010 GOSUB 15000
  161. 10100 PRINT "**************  SORT FILE PROGRAM  **************"
  162. 10105 PRINT "FILE NUMBER = ";A;" FILE NAME = ";F$(A)
  163. 10110 PRINT ""
  164. 10120 FOR T = 1 TO NREC(A)
  165. 10130 PRINT T;"- ";FLDN$(A,T)
  166. 10140 NEXT T
  167. 10150 PRINT ""
  168. 10200 PRINT "***  WHICH FIELD IS THE PRIMARY SORT FIELD ?  ***"
  169. 10210 GOSUB 60000
  170. 10212 IF DT#<1 OR DT#>NREC(A) GOTO 10210
  171. 10213 IF FTY(1,DT#) <> 2 THEN GOTO 10210
  172. 10215 T3 = FD(1)
  173. 10218 FD(1) = DT#
  174. 10219 T3 = DT#
  175. 10220 GOTO 10275 
  176. 10230 PRINT "***********  WHICH FIELD IS THE SECONDARY FIELD ?  **********"
  177. 10232 PRINT "- If the primary values are equal"  
  178. 10234 PRINT "the record with the lowest secondary value will be stored first "
  179. 10240 GOSUB 60000
  180. 10242 IF DT#<1 OR DT#>NREC(A) GOTO 10240
  181. 10244 IF FTY(1,DT#) = 1 GOTO 10410
  182. 10246 FD(2) = DT#
  183. 10250 IF KTH= 2 GOTO 10275
  184. 10260 PRINT "************  WHICH FIELD IS THE THIRD FIELD  ? *************"
  185. 10262 PRINT "- If both the primary value and the secondary value are equal"
  186. 10264 PRINT "the record with the lowest third value will be stored first"
  187. 1027044:H49)
  188. 9,51,2R
  189. (I34+I37:I40-I44:I49)
  190. 10,51,2R
  191. (J34+J37:J40-J44:J49)
  192. 11,51,2R
  193. (K34+K37:K40-K44:K49)
  194. 12,51,2R
  195. (L34+L37:L40-L44:L49)
  196. 13,51,2R
  197. (M34+M37:M40-M44:M49)
  198. 14,51,2R
  199. (N34+N37:N40-N44:N49)
  200. 15,51,2R
  201. (O34+O37:O40-O44:O49)
  202. 16,51,2R
  203. (P34+P37:P40-P44:P49)
  204. 17,51,2R
  205. (Q34+Q37:Q40-Q44:Q49)
  206. 18,51,2R
  207. (R34+R37:R40-R44:R49)
  208. 19,51,2R
  209. (S34+S37:S40-S44:S49)
  210. 20,51,2R
  211. (T34+T37:T40-T44:T49)
  212. 21,51,2R
  213. (U34+U37:U40-U44:U49)
  214. 22,51,2R
  215. (V34+V37:V40-V44:V49)
  216. 23,51,2D
  217. (V51-V41)
  218. END
  219. ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷HDR
  220. 10
  221. 10
  222. 10
  223. 10
  224. 10
  225. 10
  226. 10
  227. DAT
  228. 1,1,2R
  229. Portions Copyright (c) 1985, 1986: 
  230. 7,1,0A
  231. (DATE(86,05,09))
  232. 1,2,2R
  233. MaeDae Enterprises, Enerco Associates, P & M Software.
  234. 1,4,2R
  235. This is a sample worksheet, it is what some call a template.  It is setup
  236. 1,5,2R
  237. to show you how you can use "EZ-SPREADSHEET" to do a family budget.
  238. 1,7,2R
  239. To use the template you just put numbers in for each expense catagory and
  240. 1,8,2R
  241. put in the amount for the income figure at the bottom.  The worksheet will
  242. 1,9,2R
  243. calculate the total expenses and the amount that you can save or must take
  244. 1,10,2R
  245. from savings.
  246. 1,12,2R
  247. "EZ SPREADSHEET" can forward reference cells and come up with the correct
  248. 1,13,2R
  249. answer, even if the forward cell comtains a formula!  An example of this
  250. 1,14,2R
  251. is shown after the "Budget" below.
  252. 1,16,2R
  253. At the end of this worksheet is a sample of the technique used for the
  254. 1,17,2R
  255. Internal Rate of Return function.  While this function is very nice, it
  256. 1,18,2R
  257. does take time to calculate.
  258. 1,20,2R
  259. Budget
  260. 1,21,2R
  261. Category
  262. 2,21,0E
  263. (DATE(86,5,15))
  264. 3,21,0E
  265. (B21+30.4)
  266. 4,21,0E
  267. (C21+30.4)
  268. 5,21,0E
  269. (D21+30.4)
  270. 6,21,0E
  271. (E21+30.4)
  272. 7,21,0E
  273. (F21+30.4)
  274. 1,22,2R
  275. ----------
  276. 2,22,0C
  277. ----------
  278. 3,22,0C
  279. ----------
  280. 4,22,0C
  281. ----------
  282. 5,22,0C
  283. ----------
  284. 6,22,0C
  285. ----------
  286. 7,22,0C
  287. ----------
  288. 1,23,2R
  289. Food
  290. 2,23,0D
  291. 0
  292. 3,23,0D
  293. 0
  294. 4,23,0D
  295. 0
  296. 5,23,0D
  297. 0
  298. 6,23,0D
  299. 0
  300. 7,23,0D
  301. 0
  302. 1,24,2R
  303. Clothing
  304. 1,25,2R
  305. Newspaper
  306. 1,26,2R
  307. Insurance
  308. 1,27,2R
  309. Church
  310. 1,28,2R
  311. Mortgage
  312. 1,29,2R
  313. Magazines
  314. 1,30,2R
  315. Medical
  316. 1,31,2R
  317. Computer
  318. 1,32,2R
  319. Auto
  320. 1,33,2R
  321. Gasoline
  322. 1,34,2R
  323. Electric
  324. 1,35,2R
  325. Water
  326. 1,36,2R
  327. Loan Pay
  328. 1,37,2R
  329. School
  330. 1,38,2R
  331. Entertain
  332. 1,39,2R
  333. Misc.
  334. 2,40,0C
  335. ----------
  336. 3,40,0C
  337. ----------
  338. 4,40,0C
  339. ----------
  340. 5,40,0C
  341. ----------
  342. 6,40,0C
  343. ----------
  344. 7,40,0C
  345. ----------
  346. 1,41,2R
  347. Expenses
  348. 2,41,0D
  349. (B23:B40)
  350. 3,41,0D
  351. (C23:C40)
  352. 4,41,0D
  353. (D23:D40)
  354. 5,41,0D
  355. (E23:E40)
  356. 6,41,0D
  357. (F23:F40)
  358. 7,41,0D
  359. (G23:G40)
  360. 1,42,2R
  361. Savings
  362. 2,42,0C
  363. (B44-B41)
  364. 3,42,0C
  365. (C44-C41)
  366. 4,42,0C
  367. (D44-D41)
  368. 5,42,0C
  369. (E44-E41)
  370. 6,42,0C
  371. (F44-F41)
  372. 7,42,0C
  373. (G44-G41)
  374. 2,43,0C
  375. ----------
  376. 3,43,0C
  377. ----------
  378. 4,43,0C
  379. ----------
  380. 5,43,0C
  381. ----------
  382. 6,43,0C
  383. ----------
  384. 7,43,0C
  385. ----------
  386. 1,44,2R
  387. Income
  388. 2,44,0D
  389. 0
  390. 3,44,0D
  391. 0
  392. 4,44,0D
  393. 0
  394. 5,44,0D
  395. 0
  396. 6,44,0D
  397. 0
  398. 7,44,0D
  399. 0
  400. 2,45,0C
  401. ==========
  402. 3,45,0C
  403. ==========
  404. 4,45,0C
  405. ==========
  406. 5,45,0C
  407. ==========
  408. 6,45,0C
  409. ==========
  410. 7,45,0C
  411. ==========
  412. 1,48,2R
  413. Sample of the forward reference:
  414. 4,48,0C
  415. (G50)
  416. 1,50,0C
  417. 100
  418. 2,50,0C
  419. 200
  420. 3,50,0C
  421. 300
  422. 4,50,0C
  423. 400
  424. 5,50,0C
  425. 500
  426. 6,50,0C
  427. 600
  428. 7,50,0C
  429. (A50:F50)
  430. 1,53,2R
  431. Sample problem, showing the use of the Internal Rate of Return function.
  432. 1,55,2R
  433. Loan Analysis
  434. 1,56,2R
  435. -------------
  436. 1,57,2R
  437. Loan Amount
  438. 3,57,0D
  439. -1000
  440. 4,57,0C
  441.   Shown as negative, because YOU are
  442. 1,58,2R
  443. Year 1 Payment
  444. 3,58,0C
  445. 500
  446. 4,58,0C
  447.   making the loan!  The loan payments
  448. 1,59,2R
  449. Year 2 Payment
  450. 3,59,0C
  451. 400
  452. 4,59,0C
  453.   are income to you and you are trying
  454. 1,60,2R
  455. Year 3 Payment
  456. 3,60,0C
  457. 200
  458. 4,60,0C
  459.   to decide if you want to make the loan
  460. 1,61,2R
  461. Year 4 Payment
  462. 3,61,0C
  463. 100
  464. 4,61,0C
  465.   or not.
  466. 3,62,0C
  467. ----------
  468. 1,63,2R
  469. Net Income
  470. 3,63,0D
  471. (C57:C61)
  472. 3,64,0C
  473. ==========
  474. 1,66,2R
  475. Rate of Return
  476. 3,66,4P
  477. (IRR(.14,C57..C61))
  478. 1,68,2R
  479. Proof is NPV of
  480. 1,69,2R
  481. cash flows...
  482. 3,69,4D
  483. (ABS(NPV(C66,C58..C61)+C57))
  484. 4,69,0C
  485.   By definition the Internal Rate of
  486. 4,70,0C
  487.   Return is the interest rate that will
  488. 4,71,0C
  489.   discount the cash flow to zero!
  490. 1,73,2R
  491.  Sample Table Lookup
  492. 1,74,2R
  493. ---------------------
  494. 1,76,2R
  495.      Term
  496. 2,76,2R
  497.      Rate
  498. 1,77,2R
  499.      ----
  500. 2,77,2R
  501.      ----
  502. 1,78,0C
  503. 12
  504. 2,78,2P
  505. 0.085
  506. 1,79,0C
  507. 18
  508. 2,79,2P
  509. 0.093
  510. 1,80,0C
  511. 24
  512. 2,80,2P
  513. 0.097
  514. 1,81,0C
  515. 36
  516. 2,81,2P
  517. 0.102
  518. 1,82,0C
  519. 48
  520. 2,82,2P
  521. 0.107
  522. 4,82,2R
  523.  Value "LOOKED UP" in Table
  524. 1,83,0C
  525. 60
  526. 2,83,2P
  527. 0.111
  528. 4,83,2R
  529. -----------------------------
  530. 1,84,0C
  531. 72
  532. 2,84,2P
  533. 0.115
  534. 4,84,2P
  535. (VLOOKUP(36,A78..A84,1))
  536. 5,84,2R
  537. Rate for 36 months
  538. 1,87,2R
  539.   Sample Asset Depreciation
  540. 4,87,2R
  541.   Depreciation Calculations
  542. 1EXT T9
  543. 60620 IF KTMAX = 0 THEN PRINT "1"
  544. 60630 IF KTMAX = 0 THEN DT# = 1
  545. 60640 IF KTMAX = 0 THEN RETURN
  546. 60650 PRINT ""
  547. 60660 GOTO 61240
  548. 60670 REM ********* MOVE CURSE BACK ********
  549. 60680 IF KT = 1 GOTO 60370
  550. 60690 KT = KT - 1
  551. 60700 PRINT CHR$(8);
  552. 60710 GOTO 60370
  553. 60720 REM ********* MOVE CURSER FORWARD *********
  554. 60730 IF KT >= MAX GOTO 60370
  555. 60740 IF KT > (KTMAX + 1) GOTO 60370
  556. 60750 PRINT K$(KT);
  557. 60760 KT = KT + 1
  558. 60770 GOTO 60370
  559. 60780 REM ********** INSERT ***********
  560. 60790 IF KT > KTMAX GOTO 60370
  561. 60800 X9 = MAX
  562. 60810 WHILE X9 > KT
  563. 60820 X9 = X9 - 1
  564. 60830 K$(X9 + 1) = K$(X9)
  565. 60840 WEND 
  566. 60850 K$(KT) = " "
  567. 60860 KTMAX = KTMAX + 1
  568. 60870 FOR T9 = KT TO KTMAX
  569. 60880 PRINT K$(T9);
  570. 60890 NEXT T9
  571. 60900 T6 = (KTMAX - KT) + 1
  572. 60910 FOR T7 = 1 TO T6
  573. 60920 PRINT CHR$(8);
  574. 60930 NEXT T7
  575. 60940 GOTO 60370
  576. 60950 REM ********** DELETE ***********
  577. 60960 IF KT > KTMAX GOTO 60370
  578. 60970 K$(MAX + 1) = ""
  579. 60980 X9 = KT 
  580. 60990 WHILE X9 <= MAX
  581. 61000 K$(X9) = K$(X9 + 1)
  582. 61010 X9 = X9 + 1
  583. 61020 WEND 
  584. 61030 KTMAX = KTMAX - 1
  585. 61040 FOR T9 = KT TO KTMAX
  586. 61050 PRINT K$(T9);
  587. 61060 NEXT T9
  588. 61070 PRINT "_";
  589. 61080 T7 = (KTMAX - KT) + 2
  590. 61090 FOR T8 = 1 TO T7
  591. 61100 PRINT CHR$(8);
  592. 61110 NEXT T8
  593. 61120 GOTO 60370
  594. 61130 REM ********* BACKSPACE ********
  595. 61140 IF KT = 1 GOTO 60370
  596. 61150 KT = KT - 1
  597. 61160 PRINT CHR$(8);
  598. 61170 K$(KT) = " " 
  599. 61180 PRINT "_";
  600. 61190 PRINT CHR$(8);
  601. 61200 GOTO 60370
  602. 61210 REM *******  INPUT NOT ACCEPTABLE  ********
  603. 61220 PRINT CHR$(7);
  604. 61230 GOTO 60380
  605. 61240 REM ********* CLEAR STRINGS ********
  606. 61250 MAX = LEN(A$)
  607. 61260 D2$ = ""
  608. 61270 D1$ = ""
  609. 61280 DFLG = 0
  610. 61290 FOR Q93 = 1 TO MAX
  611. 61300 R$ = MID$(A$,Q93,1)
  612. 61310 IF INSTR(DIG$,R$) = 0 GOTO 61380
  613. 61320 IF R$ = "." OR DFLG = 1 GOTO 61360
  614. 61330 IF DFLG = 1 GOTO 61360
  615. 61340 D2$ = D2$ + R$
  616. 61350 GOTO 61380
  617. 61360 D1$ = D1$ + R$
  618. 61370 DFLG = 1
  619. 61380 NEXT Q93
  620. 61390 DA# = VAL(D2$)
  621. 61400 D1# = VAL(D1$)
  622. 61410 DT# = DA# + D1#
  623. 61420 IF K$(1) = "-" THEN DT# =  -DT#   
  624. 61430 RETURN
  625. 61900 REM ****** CHECK FOR ASC0
  626. 61910 S4$ = INKEY$
  627. 61920 C2 =  ASC(S4$)
  628. 61930 IF C2 = 83 THEN C = 1
  629. 61940 IF C2 = 82 THEN C = 6
  630. 61950 IF C2 = 75 THEN C = 19
  631. 61960 IF C2 = 77 THEN C = 4 
  632. 61970 RETURN
  633. 64200 REM
  634. 64210 PRINT " ERROR NUMBER ";ERR ; " ON LINE ";ERL
  635. 64270 CLOSE 
  636. 64280 PRINT " PRESS ANY KEY TO CONTINUE"
  637. 64290 IF INKEY$ = "" THEN 64290
  638. 64300 RESUME 3 
  639. R ; " ON LINE ";ERL
  640. 64270 CLOSE